home *** CD-ROM | disk | FTP | other *** search
Modula Implementation | 1994-09-22 | 3.1 KB | 147 lines |
- IMPLEMENTATION MODULE TypeConvert;
-
- FROM SYSTEM IMPORT WORD, BYTE, ADDRESS, LONG;
- FROM Terminal IMPORT WriteLn, WriteString;
-
- TYPE LONGWORD = ARRAY [0..3] OF BYTE;
-
- PROCEDURE Char(x : BYTE) : CHAR;
- VAR r : RECORD
- CASE : BOOLEAN OF
- TRUE : w : BYTE |
- FALSE: c : CHAR
- END
- END;
- BEGIN
- r.w:=x;
- RETURN r.c
- END Char;
-
- PROCEDURE Byte(x : BYTE) : BYTE;
- BEGIN
- RETURN x
- END Byte;
-
- PROCEDURE Cardinal(x : WORD) : CARDINAL;
- VAR r : RECORD
- CASE : BOOLEAN OF
- TRUE : w : WORD |
- FALSE: c : CARDINAL
- END
- END;
- BEGIN
- r.w:=x;
- RETURN r.c
- END Cardinal;
-
- PROCEDURE Integer(x : WORD) : INTEGER;
- VAR r : RECORD
- CASE : BOOLEAN OF
- TRUE : w : WORD |
- FALSE: i : INTEGER
- END
- END;
- BEGIN
- r.w:=x;
- RETURN r.i
- END Integer;
-
- PROCEDURE Bitset(x : WORD) : BITSET;
- VAR r : RECORD
- CASE : BOOLEAN OF
- TRUE : w : WORD |
- FALSE: b : BITSET
- END
- END;
- BEGIN
- r.w:=x;
- RETURN r.b
- END Bitset;
-
- PROCEDURE Word(x : WORD) : WORD;
- BEGIN
- RETURN x
- END Word;
-
- PROCEDURE LongCard(x : ARRAY OF BYTE) : LONGCARD;
- VAR r : RECORD
- CASE : BOOLEAN OF
- TRUE : w : LONGWORD |
- FALSE: c : LONGCARD
- END
- END;
- n : CARDINAL;
- BEGIN
- IF HIGH(x)#3 THEN
- WriteLn;
- WriteString('Wrong size of argument in TypeConvert.LongCard');
- HALT;
- WriteLn;
- RETURN LONG(0)
- END;
- FOR n:=0 TO 3 DO r.w[n]:=x[n] END;
- RETURN r.c
- END LongCard;
-
- PROCEDURE LongInt(x : ARRAY OF BYTE) : LONGINT;
- VAR r : RECORD
- CASE : BOOLEAN OF
- TRUE : w : LONGWORD;|
- FALSE: i : LONGINT
- END
- END;
- n : CARDINAL;
- BEGIN
- IF HIGH(x)#3 THEN
- WriteLn;
- WriteString('Wrong size of argument in TypeConvert.LongInt');
- HALT;
- WriteLn;
- RETURN LONG(0)
- END;
- FOR n:=0 TO 3 DO r.w[n]:=x[n] END;
- RETURN r.i
- END LongInt;
-
- PROCEDURE Real(x : ARRAY OF BYTE) : REAL;
- VAR r : RECORD
- CASE : BOOLEAN OF
- TRUE : w : LONGWORD;|
- FALSE: r : REAL
- END
- END;
- n : CARDINAL;
- BEGIN
- IF HIGH(x)#3 THEN
- WriteLn;
- WriteString('Wrong size of argument in TypeConvert.Real');
- HALT;
- WriteLn;
- RETURN 0.0
- END;
- FOR n:=0 TO 3 DO r.w[n]:=x[n] END;
- RETURN r.r
- END Real;
-
- PROCEDURE Address(x : ARRAY OF BYTE) : ADDRESS;
- VAR r : RECORD
- CASE : BOOLEAN OF
- TRUE : w : LONGWORD;|
- FALSE: a : ADDRESS
- END
- END;
- n : CARDINAL;
- BEGIN
- IF HIGH(x)#3 THEN
- WriteLn;
- WriteString('Wrong size of argument in TypeConvert.Address');
- HALT;
- WriteLn;
- RETURN LONG(0)
- END;
- FOR n:=0 TO 3 DO r.w[n]:=x[n] END;
- RETURN r.a
- END Address;
-
- END TypeConvert.
-